home *** CD-ROM | disk | FTP | other *** search
/ APDL Best Games 3 / APDL Best Games 3.iso / _clumps / _runimage (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  2000-10-15  |  12.5 KB  |  583 lines

  1.  >!RunImage
  2.  Clumps by Alan Trewartha
  3.  findclump% 1200
  4.  "LOAD <Clumps$Dir>.Code "+
  5. ~findclump%
  6.  wd% 1500, menudata% 800, workspace% 1200, tiles% 4000, match% 4500,spritearea% 12000
  7. a%=0:b%=0:c%=0:d%=
  8. Gwstart%=workspace%:wsend%=workspace%+1200:quit%=
  9. :moves%=-1:rank%=1
  10. "taskname$="Clumps Game":!wd%=0
  11.  "Wimp_Initialise",310,&4B534154,taskname$,wd% 
  12.  ,task%
  13. !wd%=-1:wd%!4=0:wd%!8=0
  14. $wd%!12=68:wd%!16=68:wd%!20=&3002
  15. 9$(wd%+24)="!clumps":
  16. "Wimp_CreateIcon",,wd% 
  17.  ihand%
  18.  "Wimp_OpenTemplate",,"<Clumps$Dir>.Templates"
  19. %scoreswh%=
  20. makewindow("hiscores")
  21. infowh%=
  22. makewindow("Info")
  23. !panelwh%=
  24. makewindow("panel")
  25. prefwh%=
  26. makewindow("pref")
  27. tellwh%=
  28. makewindow("tell")
  29.  "Wimp_CloseTemplate"
  30.  score%=
  31. icontext(panelwh%,1)
  32. $score%="0"
  33.  total%=
  34. icontext(panelwh%,2)
  35. $total%=""
  36. openmessages("<Clumps$Dir>.Resources")
  37. icontext(infowh%,0))=
  38. message("Name")
  39. icontext(infowh%,1))=
  40. message("Purpose")
  41. icontext(infowh%,2))=
  42. message("Author")
  43. icontext(infowh%,3))=
  44. message("Version")
  45. tell%=
  46. icontext(tellwh%,0)
  47. "!columns%=
  48. icontext(prefwh%,6)
  49. rows%=
  50. icontext(prefwh%,9)
  51. $"tilepix%=
  52. icontext(prefwh%,13)
  53. ease%=
  54. icontext(prefwh%,16)
  55. &-iconmenu%=
  56. makemenu(
  57. message("iconmenu"))
  58. iconmenu%!32=infowh%
  59. (-easemenu%=
  60. makemenu(
  61. message("easemenu"))
  62. closemessages
  63. openmessages("<ClumpsSave$Dir>.Preference")
  64. ,!$columns%=
  65. message("Columns")
  66. $rows%=
  67. message("Rows")
  68. $tilepix%=
  69. message("Tiles")
  70. /&b$=
  71. message("Ease"):easelevel%=
  72. 0($ease%=$(easemenu%+16+24*easelevel%)
  73. 1@a$=
  74. message("ViewStart"):wd%!0=prefwh%:wd%!4=18:wd%!12=2<<20
  75.  a$="1" 
  76.  wd%!8=wd%!12 
  77.  wd%!8=0
  78.  "Wimp_SetIconState",,wd%
  79. closemessages
  80. loadpix
  81. 7 nw%=
  82. icontext(prefwh%,6))
  83. 8 nh%=
  84. icontext(prefwh%,9))
  85. makegamewindow(wd%)
  86. "Wimp_CreateWindow",,wd% 
  87.  gamewh%
  88. loadscores
  89. openmessages("<Clumps$Dir>.Resources")
  90. error 
  91. close:
  92. wimpmask%=%1110010000000
  93.  "Wimp_Poll",wimpmask%,wd% 
  94.  reason%
  95.  reason% 
  96. redraw
  97. E=    
  98.  "Wimp_OpenWindow",,wd%:
  99.  !wd%=gamewh% 
  100. panel
  101. closewindow(!wd%)
  102. mouseclick
  103. keypress
  104. menuclick
  105.  17,18:
  106. receivemessage
  107.       
  108. checkicon
  109.  quit%
  110. closemessages
  111. savescores
  112. close
  113. redraw
  114.  "Wimp_RedrawWindow",,wd% 
  115.  more%
  116.  more%
  117.  "Wimp_GetRectangle",,wd% 
  118.  more%
  119. mouseclick
  120.  wd%!12 
  121.  wd%!8 
  122. _"      
  123. openwindow(gamewh%)
  124. `4      
  125. openmenu(iconmenu%, !wd%-64, 96+6*44)
  126. a"      
  127. openwindow(prefwh%)
  128. b        
  129.  gamewh%:
  130.  wd%!16>-1 
  131. clickicon(wd%!16)
  132.  panelwh%: 
  133.  wd%!16=0 
  134. startgame
  135.  prefwh%:
  136. preferences
  137.  tellwh%:
  138.  wd%!16=1 
  139. closewindow(tellwh%)
  140. menuclick
  141. c%=wd%+100
  142.  "Wimp_GetPointerInfo",,c%
  143. adj%=(c%!8 
  144.  topmenu% 
  145.  iconmenu%:
  146. q-    
  147.  "Wimp_DecodeMenu",,topmenu%,wd%,c%
  148.  !wd% 
  149.       
  150. startgame
  151. t"      
  152. openwindow(prefwh%)
  153. u$      
  154. openwindow(scoreswh%)
  155. v9      
  156.  "XOS_CLI","Filer_Run <Clumps$Dir>.!Help"
  157.       
  158.  5:quit%=
  159. x        
  160.  easemenu%:
  161.     easelevel%=!wd%+1
  162. {,    $ease%=$(easemenu%+16+24*easelevel%)
  163. updateicon(prefwh%,16)
  164.  adj% 
  165. openmenu(topmenu%,topx%,topy%)
  166. keypress
  167.  wd%!24=13 
  168.  !wd%=scoreswh% 
  169. inputscore(0)
  170. makegamewindow(a%)
  171. current%=0
  172. a%!0=20
  173. a%!4=1000-h%*nh%
  174. a%!8=20+w%*nw%
  175. a%!12=1000
  176. a%!16=0
  177. a%!20=0
  178. a%!24=-1
  179. a%!28=&87030052
  180. a%!32=&01070207
  181. a%!36=&00120103
  182. a%!40=0
  183. a%!44=0
  184. a%!48=w%*nw%
  185. a%!52=h%*nh%
  186. a%!56=&3D
  187. a%!60=&3000
  188. a%!64=spritearea%
  189. a%!68=0
  190. $(a%+72)="Clumps"
  191. a%!84=0
  192. startgame
  193. inputscore(0)
  194. !wd%=gamewh%
  195.  "Wimp_GetWindowState",,wd%
  196. minx%=wd%!4
  197. maxy%=wd%!16
  198.  "Wimp_DeleteWindow",,wd%
  199. loadpix
  200.  nw%=
  201. icontext(prefwh%,6))
  202.  nh%=
  203. icontext(prefwh%,9))
  204. "OS_Module",6,,,90+(nw%*nh%)*32 
  205.  ,,bigblock%
  206. makegamewindow(bigblock%)
  207. bigblock%!0=minx%
  208. bigblock%!4=maxy%-h%*nh%
  209. bigblock%!8=minx%+w%*nw%
  210. bigblock%!12=maxy%
  211. bigblock%!84=nw%*nh%
  212. c%=bigblock%+88
  213.  b%=1 
  214.  nw%:
  215.  a%=1 
  216.   c%!0=b%*w%-w%
  217.   c%!4=a%*h%-h%
  218.   c%!8=b%*w%
  219.   c%!12=a%*h%
  220.   c%!16=%11000100011010
  221. &  c%!20=tiles%+(b%*nh%-nh%+a%-1)*3
  222. ,  $(c%!20)=
  223. (5)))+"a": 
  224.  random tile
  225.   c%!24=spritearea%:c%!28=2
  226.   c%+=32
  227. "Wimp_CreateWindow",,bigblock% 
  228.  gamewh%
  229. openwindow(gamewh%)
  230.  "OS_Module",7,,bigblock%
  231. $score%="0"
  232. $total%=
  233. (nw%*nh%)
  234. updateicon(panelwh%,1)
  235. updateicon(panelwh%,2)
  236. findclumps
  237. findclumps
  238. B%=match%
  239. C%=tiles%
  240. D%=nw%
  241. E%=nh%
  242. (findclump%)=0 
  243. finished
  244. finished
  245.  $tiles%="00" 
  246. $  $tell%=
  247. message("Win"):rank%=5
  248. &  $tell%=
  249. message("Lose"):rank%=10
  250. ($score%)/(nw%*nh%)
  251. icontext(scoreswh%,(rank%)*2+2)) 
  252. inthetable
  253. openwindow(tellwh%)
  254. inthetable
  255.  $tiles%="00" 
  256.  $tell%=
  257. message("WinHigh") 
  258.  $tell%=
  259. message("LoseHigh")
  260.  b%<5 
  261. icontext(scoreswh%,(rank%-b%)*2+2))
  262. icontext(scoreswh%,(rank%-b%+1)*2+2)=$
  263. icontext(scoreswh%,(rank%-b%)*2+2)
  264. icontext(scoreswh%,(rank%-b%+1)*2+3)=$
  265. icontext(scoreswh%,(rank%-b%)*2+3)
  266.  b%+=1
  267. rank%=rank%-b%+1
  268. icontext(scoreswh%,(rank%)*2+2)=$score%+"/"+
  269. (nw%*nh%)
  270. icontext(scoreswh%,(rank%)*2+3)=""
  271. openwindow(scoreswh%)
  272.  "Wimp_ForceRedraw",scoreswh%,0,-1024,1024,0
  273. inputscore(1)
  274. inputscore(a%)
  275. wd%!0=scoreswh%
  276. wd%!4= rank%*2+3
  277. wd%!8=&F024*a%
  278. wd%!12=&F024
  279.  "Wimp_SetIconState",,wd%
  280. updateicon(scoreswh%,rank%*2+3)
  281.  a%=1 
  282.  "Wimp_SetCaretPosition",scoreswh%,rank%*2+3,,,-1,0
  283.  "Wimp_SetCaretPosition",-1,-1
  284. clickicon(i%)
  285.  current%<>0 
  286. setclump(0,"00")
  287. -  $total%=
  288. ($total%)-(?clumplist%-1)/2)
  289. 3  $score%=
  290. ($score%)+((?clumplist%-1)/2-1)^2)
  291. updateicon(panelwh%,1)
  292. updateicon(panelwh%,2)
  293.   current%=0
  294. collapse
  295. findclumps
  296. collapse
  297. high%=
  298. (high%/nh%)*nh%+nh%
  299. a%=low%
  300. )minx%=2048:miny%=2048:maxx%=0:maxy%=0
  301. (a%/nh%)*nh%=a% 
  302.      
  303. (low%/nh%)*nh%=low% 
  304. &      
  305.  low%<>a% 
  306.  high%=nw%*nh%-1
  307.         
  308.       $(tiles%+low%*3)="00"
  309.       
  310. markicon(low%)
  311. "      low%=
  312. (low%/nh%)*nh%+nh%
  313.  $(tiles%+a%*3+1)="a" 
  314.  (low%<>a%) 
  315. )      $(tiles%+low%*3)=$(tiles%+a%*3)
  316.       
  317. markicon(low%)
  318.       $(tiles%+a%*3)="00"
  319.       
  320. markicon(a%)
  321.         
  322.     low%+=1
  323.   a%+=1
  324.  a%>high%
  325.  "Wimp_ForceRedraw",gamewh%,minx%,miny%,maxx%,maxy%
  326. markicon(i%)
  327. !wd%=gamewh%
  328. wd%!4=i%
  329.  "Wimp_GetIconState",,wd%
  330.  wd%!8 < minx% 
  331.  minx%=wd%!8
  332.  wd%!12< miny% 
  333.  miny%=wd%!12
  334.  wd%!16> maxx% 
  335.  maxx%=wd%!16
  336.  wd%!20> maxy% 
  337.  maxy%=wd%!20
  338. checkicon
  339.  "Wimp_GetPointerInfo",,wd%
  340.  (wd%!12=gamewh%) 
  341.  (wd%!16>-1) 
  342.   newcurr%=match%?wd%!16
  343.   newcurr%=0
  344.  current%<>newcurr% 
  345. setclump(1,"a")
  346.   current%=newcurr%
  347. setclump(1,"b")
  348. setclump(b%,a$)
  349. low%=nw%*nh%
  350. high%=0
  351.  current%<>0 
  352. <%  clump%=1:clumplist%=match%+1536
  353.  current%<>clump%:clumplist%+=?clumplist%:clump%+=1:
  354.  a%=1 
  355.  ?clumplist%-1 
  356. ?     c%=clumplist%!a% 
  357.  &FFFF
  358.  c%<low% 
  359.  low%=c%
  360.  c%>high% 
  361.  high%=c%
  362.     $(tiles%+c%*3+b%)=a$
  363. C#    
  364. PROCupdateicon(gamewh%,c%)
  365. D9    !wd%=gamewh%:wd%!4=c%:
  366.  "Wimp_GetIconState",,wd%
  367. E@    
  368.  "Wimp_ForceRedraw",gamewh%,wd%!8,wd%!12,wd%!16,wd%!20
  369. preferences
  370.  wd%!16 
  371. M$    c%=
  372. ($columns%):c%=c%+(c%>5)
  373. N.    $columns%=
  374. (c%):
  375. updateicon(prefwh%,6)
  376. P%    c%=
  377. ($columns%):c%=c%-(c%<40)
  378. Q.    $columns%=
  379. (c%):
  380. updateicon(prefwh%,6)
  381. S!    c%=
  382. ($rows%):c%=c%+(c%>5)
  383. T+    $rows%=
  384. (c%):
  385. updateicon(prefwh%,9)
  386. V"    c%=
  387. ($rows%):c%=c%-(c%<30)
  388. W+    $rows%=
  389. (c%):
  390. updateicon(prefwh%,9)
  391. "XOS_CLI","Filer_OpenDir <Clumps$Dir>.Tiles"
  392. Z5    wd%!0=prefwh%:
  393.  "Wimp_GetWindowOutline",,wd%
  394. [G    topx%=wd%!4+38:topy%=wd%!8+100:
  395. openmenu(easemenu%,topx%,topy%)
  396. ]0    file% = 
  397. ("<ClumpsSave$Dir>.Preference")
  398. ^&    
  399.  #file%, "Columns:"+$columns%
  400. _     
  401.  #file%, "Rows:"+$rows%
  402. `$    
  403.  #file%, "Tiles:"+$tilepix%
  404. a%    
  405.  #file%, "Ease:"+
  406. easelevel%
  407. b:    c%=
  408. icontext(prefwh%,18):c%=-((wd%!24 
  409.  2<<20)<>0)
  410. c"    
  411.  #file%, "ViewStart:"+
  412.  #file%
  413. icontext(w%,i%)
  414. !wd%=w%:wd%!4=i%
  415.  "Wimp_GetIconState",,wd%
  416. =wd%!28
  417. updateicon(w%,i%)
  418. o&wd%!0=w%:wd%!4=i%:wd%!8=0:wd%!12=0
  419. "Wimp_SetIconState",,wd%
  420. error
  421. !wd%=
  422.  !wd% 
  423.  1<<30:err_str$="":box%=3
  424. :err_str$=" at line "+
  425. :box%=2
  426. $(wd%+4)=
  427. $+err_str$+
  428.  "Wimp_ReportError",wd%,box%,taskname$ 
  429.  ,response%
  430. =(response%=2)
  431. close
  432.  "Wimp_CloseDown",task%,&4B534154
  433. receivemessage
  434.  wd%!16 
  435.  0:quit%=
  436. changepix
  437. changepix
  438. term(wd%+44):a$=$(wd%+44):b$=a$
  439. a$,"."):a$=
  440. a$,".")+1):
  441.  wd%!40=&ff9 
  442. "Wimp_GetPointerInfo",,wd%+100
  443.  wd%!112=prefwh% 
  444. @    
  445. "XOS_CLI","COPY "+b$+" <Clumps$Dir>.Tiles."+a$+" N~CV"
  446.     wd%!12=wd%!8:wd%!16=4
  447. *    
  448.  "Wimp_SendMessage",17,wd%,wd%!4
  449.     $tilepix%=a$
  450. )    file%=
  451. ("<Clumps$Dir>.Tiles."+a$)
  452.      size%=
  453. #file%+4: 
  454. #file%
  455. .    
  456.  size%>12000 
  457.  $tilepix%="Numbers":
  458. updateicon(prefwh%,13)
  459. loadpix
  460. ,file%=
  461. ("<Clumps$Dir>.Tiles."+$tilepix%)
  462. size%=
  463. #file%+4: 
  464. #file%
  465. (!spritearea%=size%: spritearea%!8=16
  466.  "OS_SpriteOp",256+9,spritearea%
  467.  "OS_SpriteOp",256+10,spritearea%,"<Clumps$Dir>.Tiles."+$tilepix%
  468.  "OS_SpriteOp",40+256,spritearea%,"00" 
  469.  ,,,w%,h%,,mode%
  470.  "OS_ReadModeVariable",mode%,4 
  471.  ,,a%
  472. w%=w%*2^a%
  473.  "OS_ReadModeVariable",mode%,5 
  474.  ,,a%
  475. h%=h%*2^a%
  476. term(a%)
  477.  a%?n%>31
  478.   n%+=1
  479. a%?n%=13
  480. makemenu(menu$)
  481. start%=menudata%
  482. 5menudata%!12=&0277:menudata%!20=44:menudata%!24=0
  483. ;item$=
  484. menu$,
  485. menu$,"|")-1):menu$=
  486. menu$,
  487. menu$,"|")+1)
  488. $(menudata%)=item$
  489. width%=
  490. (item$)-3
  491. menudata%+=28
  492. =  item$=
  493. menu$,
  494. menu$,"|")-1):menu$=
  495. menu$,
  496. menu$,"|")+1)
  497. !  !menudata%=0:menudata%!4=-1
  498. item$>width% 
  499.  width%=
  500. item$
  501. item$<12 
  502. 3    menudata%!8=&07000021:$(menudata%+12)=item$
  503. E    menudata%!8=&07000121:menudata%!12=workspace%:menudata%!16=-1
  504.     menudata%!20=
  505. item$+1
  506. .    $workspace%=item$:workspace%+=
  507. item$+1
  508.   menudata%+=24
  509.  menu$=""
  510. !(menudata%-24)=&80
  511. start%!16=width%*16+32
  512. =start%
  513. openmenu(menu%,x%,y%)
  514. $topmenu%=menu%:topx%=x%:topy%=y%
  515.  "Wimp_CreateMenu",,menu%,x%,y%
  516. openwindow(handle%)
  517. !wd%=handle%
  518.  "Wimp_GetWindowState",,wd%
  519.  "Wimp_OpenWindow",,wd%
  520.  handle%=gamewh% 
  521. panel
  522.  handle%=tellwh% 
  523.  "Wimp_GetWindowOutline",,wd%
  524.   wd%?20=1
  525.   wd%!21=wd%!4
  526.   wd%!23=wd%!8
  527.   wd%!25=wd%!12
  528.   wd%!27=wd%!16
  529.  "OS_Word",21,wd%+20
  530. panel
  531. (minx%=wd%!4:miny%=wd%!8:maxx%=wd%!12
  532. !wd%=panelwh%
  533.  "Wimp_GetWindowState",,wd%
  534. :wd%!4=minx%:wd%!12=maxx%:wd%!16=miny%-2:wd%!28=gamewh%
  535.  "Wimp_OpenWindow",,wd%
  536. closewindow(handle%)
  537. !wd%=handle%
  538.  "Wimp_CloseWindow",,wd%
  539.  handle%=gamewh% 
  540. closewindow(panelwh%)
  541.  handle%=tellwh% 
  542.  ?wd%=1:wd%!1=&80008000:wd%!5=&7FFF7FFF:
  543.  "OS_Word",21,wd%
  544. openmessages(file$)
  545.  "MessageTrans_FileInfo",,file$
  546.  "OS_Module",6,,,21+
  547. (file$) 
  548.  ,,messageloc%
  549. ,$(messageloc%+20)=file$:messageloc%!16=0
  550.  "MessageTrans_OpenFile",messageloc%,messageloc%+20,0
  551. message(mess$)
  552.  "MessageTrans_Lookup",messageloc%,mess$,0,0,0,0,0,0 
  553.  ,,mess$
  554. =mess$
  555. closemessages
  556.  "MessageTrans_CloseFile",messageloc%
  557.  "OS_Module",7,,messageloc%
  558. makewindow(a$)
  559.  "Wimp_LoadTemplate",,wd%,workspace%,wsend%,-1,a$,0 
  560.  ,,workspace%
  561.  "Wimp_CreateWindow",,wd% 
  562. loadscores
  563. ,file% = 
  564. ("<ClumpsSave$Dir>.ScoreTable")
  565.  a%=4 
  566.   a$ = ""
  567.   b% = 
  568.  #file%
  569.  b%<>10
  570.     a$ += 
  571.     b% = 
  572.  #file%
  573. icontext(scoreswh%,a%)=a$
  574.  #file%
  575. savescores
  576. ,file% = 
  577. ("<ClumpsSave$Dir>.ScoreTable")
  578.  a%=4 
  579.  23  
  580.  #file%, $
  581. icontext(scoreswh%,a%)
  582.  #file%
  583.